//当前编辑行的索引
var existEditIndex = -1;
$(function () {
    $('#ordersgrid').datagrid({
        singleSelect: true,
        rownumbers: true,
        showFooter: true,
        toolbar: [
            {
                text: '新增',
                iconCls: 'icon-add',
                handler: function () {
                    handleAdd();
                }
            }, '-', {
                text: '提交',
                iconCls: 'icon-save',
                handler: function () {
                    handleSubmit();
                }
            }
        ],
        columns: [[
            {
                field: 'goodsuuid', title: '商品编号', width: 100, editor: {
                type: 'numberbox', options: {
                    disabled: true
                }
            }
            },
            {
                field: 'goodsname', title: '商品名称', width: 100, editor: {
                type: 'combobox', options: {
                    url: 'goods_list',     //请求商品列表
                    valueField: 'name',    //提交给后台的
                    textField: 'name',     //显示给用户看的,
                    onSelect: function (goods) {
                        //获取商品编号和价格字段的编辑器并设置相应的值
                        var editor = getEditor('goodsuuid');
                        $(editor.target).val(goods.uuid);
                        editor = getEditor('price');
                        $(editor.target).val(Request['type'] == 1 ? goods.inprice : goods.outprice);  //1-采购单，2-销售单

                        //绑定事件
                        bindGridEvent();

                        //每次切换商品后焦点聚焦在数量框
                        $(getEditor('num').target).select();

                        //计算金额
                        cal()
                    }
                }
            }
            },
            {
                field: 'price',
                title: '价格',
                width: 100,
                editor: {type: 'numberbox', options: {precision: 2}}
            },
            {field: 'num', title: '数量', width: 100, editor: 'numberbox'},
            {
                field: 'money',
                title: '金额',
                width: 100,
                editor: {type: 'numberbox', options: {precision: 2, disabled: true}}
            },
            {
                field: '-', title: '操作', width: 100, formatter: function (value, row, rowIndex) {
                if (row.num === '合计') {
                    return;
                }
                return '<a href="javascript:void(0)" onclick="deleteRow(' + rowIndex + ')">删除</a>'
            }
            }
        ]],
        onClickRow: function (rowIndex, rowData) {
            $('#ordersgrid').datagrid('endEdit', existEditIndex);
            $('#ordersgrid').datagrid('beginEdit', rowIndex);
            existEditIndex = rowIndex;
            //绑定事件
            bindGridEvent();
        }
    })

    //增加合计行
    $('#ordersgrid').datagrid('reloadFooter', [
        {num: '合计', money: 0.00}
    ]);


    //加载供应商下拉表格
    $('#supplier').combogrid({
        panelWidth: 700,
        idField: 'uuid',
        textField: 'name',
        url: 'supplier_list?t1.type=' + Request['type'],
        columns: [[
            {field: 'uuid', title: '编号', width: 100},
            {field: 'name', title: '名称', width: 100},
            {field: 'address', title: '联系地址', width: 100},
            {field: 'contact', title: '联系人', width: 100},
            {field: 'tele', title: '联系电话', width: 100},
            {field: 'email', title: '邮件地址', width: 100}
        ]],
        mode: 'remote'
    });
})


/**
 * 处理新增
 */
function handleAdd() {
    //关闭前次的编辑行
    if (existEditIndex > -1) {
        $('#ordersgrid').datagrid('endEdit', existEditIndex);
    }
    //增加一行
    $('#ordersgrid').datagrid('appendRow', {num: 0, money: 0});
    var rows = $('#ordersgrid').datagrid('getRows');
    existEditIndex = rows.length - 1;
    $('#ordersgrid').datagrid('beginEdit', existEditIndex);
}


/**
 * 处理提交
 */
function handleSubmit() {
    //关闭可能存在的编辑行
    if (existEditIndex > -1) {
        $('#ordersgrid').datagrid('endEdit', existEditIndex);
    }

    //获取所有明细
    var rows = $('#ordersgrid').datagrid('getRows');
    if (!rows || !rows.length) {
        $.messager.alert("提示", "当前没有要提交的订单", 'info', null);
        return;
    }
    var formData = $('#orderForm').serializeJSON();
    formData.json = JSON.stringify(rows);
    $.ajax({
        url: 'returnorders_add?t.type=' + Request['type'],
        type: 'post',
        data: formData,
        dataType: 'json',
        success: function (result) {
            if (result.success) {
                //提交成功后清空相关数据
                $.messager.alert("提示", result.message, 'info', function () {
                    if (result.success) {
                        //清空供应商
                        $('#supplier').combogrid('clear')

                        //清空表格(参数的格式是通过查看getData方法得到的)
                        $('#ordersgrid').datagrid('loadData', {total: 0, rows: [], footer: [{num: '合计', money: 0.00}]})

                        //关闭增加订单窗口
                        $('#addOrdersDlg').dialog('close');

                        //刷新我的订单列表
                        $('#grid').datagrid('reload');
                    }
                })
            } else {
                // window.location.href = 'login.html';
                $.messager.alert("提示", result.message, 'info', null);
            }
        }
    })
}


/**
 * 获得当前可编辑行的指定字段的编辑器，用于给字段设置值
 * @param field
 * @returns {jQuery}
 */
function getEditor(field) {
    return $('#ordersgrid').datagrid('getEditor', {index: existEditIndex, field: field});
}

/**
 * 计算金额
 */
function cal() {
    //获取数量字段和价格字段的编辑器，并取值
    var numEditor = getEditor('num');
    var priceEditor = getEditor('price');
    var num = $(numEditor.target).val();
    var price = $(priceEditor.target).val();

    //计算总金额并保留2位小数
    var money = (num * price).toFixed(2);

    //给金额字段赋值
    var moneyEditor = getEditor('money');
    $(moneyEditor.target).val(money);

    //前一步只是对金额输入框进行了赋值，但对应的row对象中仍然没有({num: 0, money: 0})，
    // 只有退出了编辑模式后才会自动放入,因此为了后面方便计算总金额，这里手动放置一下money，
    // 当然也可以手动放置num，不过后续在编辑状态下没有用到它，所以也可以不管，反正退出编
    // 辑模式后系统会自动更新。
    var curRow = $('#ordersgrid').datagrid('getRows')[existEditIndex];
    curRow.money = money;

    //编辑行总金额改变，合计金额也相应改变
    sum();
}

/**
 * 绑定键盘输入事件
 */
function bindGridEvent() {
    var numEditor = getEditor('num');
    $(numEditor.target).bind('keyup', function () {
        cal()   //计算金额
    })

    var priceEditor = getEditor('price');
    $(priceEditor.target).bind('keyup', function () {
        cal()   //计算金额
    })
}

/**
 * 计算合计金额
 */
function sum() {
    var rows = $('#ordersgrid').datagrid('getRows');
    var total = 0;
    $.each(rows, function (i, row) {
        total += parseFloat(row.money)
    });

    //设置行脚数据
    $('#ordersgrid').datagrid('reloadFooter', [
        {num: '合计', money: total.toFixed(2)}
    ]);
}


function deleteRow(rowIndex) {
    //删除前关闭编辑行否则编辑行的数据会发生丢失(因为它没有写到对应的row里边去，关闭编辑状态时会写进去)
    $('#ordersgrid').datagrid('endEdit', existEditIndex);

    //删除行
    $('#ordersgrid').datagrid('deleteRow', rowIndex);

    //删除行后原来的删除按钮对应的行号需要刷新，因此要重新加载一下数据
    //loadData：加载本地数据，旧的行会被移除。
    var data = $('#ordersgrid').datagrid('getData');
    $('#ordersgrid').datagrid('loadData', data);

    //计算合计
    sum();
}